זה מסורבל?
יש לכם רעיון לייעול?
if (isset($_POST['Submit']))
{
$UserName =& $_POST['UserName'];
$Password =& $_POST['Password'];
$UserName = htmlspecialchars($UserName, ENT_QUOTES, 'UTF-8');
$Password = htmlspecialchars($Password, ENT_QUOTES, 'UTF-8');
$UserName = mysqli_real_escape_string($UserName);
$Password = mysqli_real_escape_string($Password);
$Password = md5($Password);
// שאילתת התחברות לאתר
}
?>
6 תשובות
זה בסדר גמור, רק שלוש הערות:
א. אתה מכניס למסד מחרוזות כבר אחרי htmlSpecialChars. זה לא רעיון טוב. htmlSpecialChars צריך להתבצע בזמן התצוגה ולא בזמן השמירה. תחשוב שהיום אתה מציג את שם המשתמש בעמוד ווב ומחר אתה רוצה להציג אותו בתוך הודעת מייל או בדו"ח אקסל. שם אתה לא רוצה שיופיעו גרשיים מיותרות, בגלל ש-htmlSpecialChars מתאים לעמודי ווב ולא לקבצי אקסל.
ב. אתה עושה לסיסמה md5, הפלט של md5 אף פעם לא יכלול גרשיים או משהו בסגנון לכן שני הפעולות (hsc, escape) האלה על סיסמה מיותרות.
ג. md5, באיחוד ככה לא מספק מבחינת אבטחה.
זה אומר שדף כזה הוא מושלם?
את סעיף ג בכלל לא הבנתי
if (isset($_POST['Submit']))
{
$UserName =& $_POST['UserName'];
$Password =& $_POST['Password'];
$UserName = mysqli_real_escape_string($UserName);
$Password = md5($Password);
// שאילתת התחברות לאתר
}
?>
במקרה הזה אין סיבה לעשות את שני ההצבות הראשונות.
$UserName = mysqli_real_escape_string($_POST['UserName']);
$Password = md5($_POST['Password']);
// שאילתת התחברות לאתר
}
מעבר לזה, אני הייתי מוסיף בדיקה שהמערך post בכלל מכיל את שני המפתחות האלה ושהם לא מחרוזות ריקות
{
..
}
else if(!is_string($_POST['UserName']) || '' === trim($_POST['UserName']))
{
..
}
else if(!is_string($_POST['Password']) || empty($_POST['Password']))
{
..
}
else
{
$UserName = mysqli_real_escape_string($_POST['UserName']);
$Password = md5($_POST['UserName']);
}
@sogo בסעיף ג' אלכס אמר ש-md5 זה לא מספיק כדי להצפין סיסמה. זה לא מוגן בכלל. והוא הפנה אותך למאמר שמסביר למה זה לא מספיק ומראה דרך חלופית.
עצה שלי ככה בשביל ואלידיציה בלי שום בעיות והכי טובה מבחינתי
אם אתה רוצה למשל לקבל רק string ולא משהו אחר תעשה ככה: